import java.util.Stack;

public class Test {
    public static void main(String[] args) {

    }
    //给你一个字符串数组 tokens ，表示一个根据 逆波兰表示法 表示的算术表达式。
    public int evalPRN(String[] tokens){
        Stack<Integer> stack = new Stack<>();//创建一个栈将数值存入栈中
        for (String str : tokens){
            if(!isOperator(str)){//如果不是运算符,是数字
                int x = Integer.parseInt(str);//把一个字符串变成一个整数
                stack.push(x);
            }else {//是运算符
                int val2 = stack.pop();//取出栈顶元素
                int val1 = stack.pop();
                switch (str){//判断表达式
                    case "+" :
                        stack.push(val1 + val2);//运算完直接放进栈里面
                        break;
                    case "-" :
                        stack.push(val1 - val2);//运算完直接放进栈里面
                        break;
                    case "*" :
                        stack.push(val1 * val2);//运算完直接放进栈里面
                        break;
                    case "/" :
                        stack.push(val1 / val2);//运算完直接放进栈里面
                        break;
                }
            }
        }
        return stack.pop();//将最后的结构出栈
    }
    private  boolean isOperator(String str){//判断是不是操作符
        if(str.equals("+") ||str.equals("-")||str.equals("*")||str.equals("/")){
            return  true;
        }
        return false;
    }

    //栈的压入、弹出序列
    public boolean IsPopOrder (int[] pushV, int[] popV) {
        Stack<Integer> stack = new Stack<>();//创建一个栈
        int j = 0;
        for(int i = 0; i < pushV.length;i++){
            stack.push(pushV[i]);
            while (!stack.empty() && stack.peek() == popV[j] && j < popV.length){//栈不为空，j没有超出范围，栈顶元素和popV[j]一样
                stack.pop();
                j++;
            }
        }
        return stack.empty();

    }
}
